// 集合

// 去重
const arr = [1, 1, 1, 2, 2]
const arr2 = [...new Set(arr)]

// 判断元素是否在集合中
const set = new Set(arr)
const has = set.has(1)

// 交集
const set2 = new Set([2, 3])
const set3 = new Set([...set].filter(item => set2.has(item)))

// 使用 ES6 的 SET
// 1, 使用Set对象：new add delete has size
// 2, 迭代Set: 多种迭代方法，Set 与 Array互转，求交集/差集

let mySet = new Set()
mySet.add(1)
mySet.add(5)
mySet.add(5) // 保留一个 5
mySet.add('mike')
let o = { a: 1 }
mySet.add(o)
mySet.add(o) // 保留两个对象，因为对象的位置不一样
// console.log(mySet)

// console.log(mySet.has(1))
// console.log(mySet.has(3))
// console.log(mySet.has(o))

mySet.delete(5)
// console.log(mySet.size)

// 迭代方法
for (let item of mySet) {
  console.log(item)
}

for (let item of mySet.keys()) {
  console.log(item)
}

for (let item of mySet.values()) {
  console.log(item)
}

for (let [item, index] of mySet.entries()) {
  console.log(item, index)
}


// 转换Array
const a = [...mySet]
const b = Array.from(mySet)
console.log(a, '-----777')
console.log(b, '-----9999')


// Array 转化 Set
const mySet2 = new Set([1, 2, 3, 4])
console.log(mySet2)


// 求交集 intersection
const intersection = new Set([...mySet].filter(x => mySet2.has(x)))
console.log(intersection, '-----交集')

// 求差集
const difference = new Set([...mySet].filter(x => !mySet2.has(x)))
console.log(difference, '-----差集')